In a distributed database, “shards” (e.g., selected table rows) of a database can be accessed in a number of read/write transactions, which are designed to move the database, as a whole, from one consistent state to another. Typically, database queries acquire a read lock that locks a database to ensure the shards stay in a consistent state until the queries are complete. However, this may tend to block the database for prolonged periods of time, potentially delaying write operations and causing write operations to delay other read operations.